home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / lib_dos.exe / INDEX.H next >
C/C++ Source or Header  |  1989-09-17  |  5KB  |  169 lines

  1. #define BLANK           ' '
  2.  
  3.     /* type of indexed find */
  4. #define FIND_FIRST      0
  5. #define FIND_NEXT       1
  6. #define FIND_PREV       2
  7. #define FIND_LAST       3
  8.  
  9.     /* find condition */
  10. #define FIND_EQL        0
  11. #define FIND_GTR        1
  12. #define FIND_LSS        2
  13. #define FIND_NEQ        3
  14. #define FIND_GEQ        4
  15. #define FIND_LEQ        5
  16.  
  17.     /* function returns */
  18. #define OK              0
  19. #define OPEN_ERROR      -2
  20. #define IX_IO_ERR       -1
  21. #define IX_ERR          1
  22. #define NOT_FOUND       2
  23. #define NO_MORE         3
  24. #define INV_PARAM       5
  25. #define INV_NUM_KEYS    6
  26.  
  27.     /* index record length,
  28.        number bytes available for keys,
  29.        minimum number of keys acceptable */
  30. #define REC_LENGTH      2048
  31. #define KEY_BYTES       2036
  32. #define MIN_NUM_KEYS    4
  33.  
  34.     /* data_type */
  35. #define ftCHAR      0
  36. #define ftUCHAR     1
  37. #define ftSCHAR     2
  38. #define ftUNS_INT   3
  39. #define ftINT       4
  40. #define ftULONG     5
  41. #define ftLONG      6
  42. #define ftFLOAT     7
  43. #define ftDOUBLE    8
  44. #define ftH_BCD_1   50
  45. #define ftH_BCD_2   51
  46. #define ftH_BCD_3   52
  47. #define ftH_BCD_4   53
  48. #define ftH_BCD_5   54
  49. #define ftH_BCD_6   55
  50. #define ftH_BCD_7   56
  51. #define ftH_BCD_8   57
  52. #define ftH_BCD_9   58
  53. #define ftH_BCD_10  59
  54. #define ftT_BCD_1   60
  55. #define ftT_BCD_2   61
  56. #define ftT_BCD_3   62
  57. #define ftT_BCD_4   63
  58. #define ftT_BCD_5   64
  59. #define ftT_BCD_6   65
  60. #define ftT_BCD_7   66
  61. #define ftT_BCD_8   67
  62. #define ftT_BCD_9   68
  63. #define ftT_BCD_10  69
  64. #define ftSTRUCT    127
  65.  
  66. #define LEVEL_0     0
  67. #define LEVEL_1     1
  68. #define LEVEL_2     2
  69.  
  70. #define EQUAL       0
  71. #define GREATER     1
  72. #define LESS        2
  73.  
  74. #define FLD_TYP(x)              ((x & 0x80)?0:x)
  75. #define KEY_LNG(x,y)            (FLD_LENG (x,y) + sizeof (long))
  76. #define KEY_lng(x)              (x + sizeof (long))
  77. #define NUM_KEY(x,y)            (KEY_BYTES / KEY_LNG(x,y) )
  78. #define NUM_key(x)              (KEY_BYTES / x)
  79. #define KEY_POS(i,x,y)          (i * KEY_LNG (x,y) )
  80. #define KEY_pos(i,x)            (i * x)
  81. #define SET_KEY(key,ix_rec,x,y,z)  key=(KEY *)(&(ix_rec->keys[KEY_POS(x,y,z)]))
  82. #define SET_key(key,ix_rec,x,y)    key=(KEY *)(&(ix_rec->keys[KEY_pos(x,y)]))
  83.  
  84. typedef struct
  85. {
  86.     char            level;
  87.     unsigned char   data_type;
  88.     int             num_keys;
  89.     long            next;
  90.     long            prev;
  91.     char            keys[KEY_BYTES];
  92. } IX_REC;
  93.  
  94. typedef struct
  95. {
  96.     long            avail_boc;
  97.     long            level0_boc;
  98.     long            level0_eoc;
  99.     char            filler [KEY_BYTES];
  100. } BOF;
  101.  
  102. typedef union VALue VALUE;
  103.  
  104. typedef struct
  105. {
  106.     unsigned char   data_type;  /* data storage type */
  107.     VALUE           *val;       /* value of the item */
  108. } KEY_COMPONENT;
  109.  
  110. typedef struct
  111. {
  112.     unsigned char   num_keys;   /* number of keys */
  113.     KEY_COMPONENT   key [10];   /* up to ten keys */
  114. } KEY_STRUCT;
  115.  
  116. union VALue
  117. {
  118.     char            wdCHAR [128];
  119.     unsigned short  wdUINT;
  120.     short           wdINT;
  121.     long            wdLONG;
  122.     float           wdFLOAT;
  123.     double          wdDOUBLE;
  124.     unsigned char   wdUCHR;
  125.     signed char     wdSCHR;
  126.     unsigned long   wdULONG;
  127.     KEY_STRUCT      KSTRUCT;
  128. };
  129.  
  130. typedef struct
  131. {
  132.     long            ptr_down;
  133.     VALUE           value;
  134. } KEY;
  135.  
  136. typedef struct
  137. {
  138.     long            data_rec;   /* returned record # for user */
  139.     long            recno[3];   /* record # for all 3 index levels */
  140.     int             ix[3];      /* index for all 3 levels */
  141.     unsigned char   data_type;  /* data storage type */
  142.     unsigned char   find_type;  /* FIND_EQL, FIND_GTR, FIND_LSS,
  143.                                    FIND_NEQ, FIND_GEQ, FIND_LEQ */
  144.     VALUE           *val;       /* original key argument */
  145.     int             fn;         /* file number */
  146. } FIND_IX;
  147.  
  148. int IX_get_down (IX_REC *, IX_REC *, int, int, VALUE *);
  149. int IX_get_rec (long, IX_REC *, int);
  150. int IX_put_rec (long, IX_REC *, int);
  151. int IX_get_BOF (int);
  152. int IX_put_BOF (int);
  153. int IX_compare_struct (IX_REC *, VALUE *, int, int, unsigned char, int);
  154. int IX_compare (IX_REC *, VALUE *, int);
  155. int IX_compare_rec (IX_REC *, VALUE *, int *);
  156. int IX_compare_EQL (IX_REC *, VALUE *, int *);
  157. int IX_compare_L2 (IX_REC *, VALUE *, int, long);
  158. int IX_compare_L2_EQL (IX_REC *, VALUE *, int *, long);
  159. int IX_compare_L0 (IX_REC *, VALUE *, long *, int *, int);
  160. int IX_compare_L0_EQL (IX_REC *, VALUE *, long *, int *, int);
  161. int FLD_LENG (unsigned char, VALUE *);
  162. int COPY_KEY (char *, VALUE *, unsigned char);
  163. int IX_add (long, char *, unsigned char, int);
  164. int IX_del (char *, long, unsigned char, int);
  165. int IX_find_first (FIND_IX *, char *, int, int, unsigned char);
  166. int IX_find_last (FIND_IX *, char *, int, int, unsigned char);
  167. int IX_find_next (FIND_IX *);
  168. int IX_find_prev (FIND_IX *);
  169.